如何查看被mount --bind目录的内容

·

mount --bind

当你用:

mount -o bind /new-disk /var/lib

绑定挂载后的 /var/lib 就被 新的分区内容覆盖

原来真实的 /var/lib 内容仍然在磁盘上,但无法通过 /var/lib 直接访问

想在 不 umount 的情况下 查看原来目录的内容,有几种经典做法:

再把原始目录挂载到其他路径(最常用)

mkdir /mnt/origin_root
mount --bind / /mnt/origin_root    # 临时挂载根不推荐;下面是推荐方式

直接通过 /proc/[pid]/root 访问(最常见最干净) 更推荐:

找到任意仍在主根下运行的进程,如 systemd :

ls -l /proc/1/root/var/lib
# 但最好再 bind 一层:
mkdir /mnt/original
mount --bind /proc/1/root/var/lib /mnt/original
ls /mnt/original
# 你就可以浏览原来 /var/lib 中的内容了。
# 不需要 umount,不需要停止业务,不影响现有 /var/lib。

直接通过 /proc/[pid]/root 访问

# 任意 pid 都行,例如:
ls /proc/1/root/var/lib
# 就是没被覆盖的 /var/lib。
# 但这种方式只是临时查看,比 bind 挂载不方便操作。

提前创建 “逃生入口”(经验技巧)

# 以后遇到类似场景:
mkdir /var/lib.real
mount --bind /var/lib /var/lib.real
mount --bind /newdisk /var/lib
# 这样以后变成:
# /var/lib → 新分区
# /var/lib.real → 原目录仍可访问
# 但必须在第一次 bind 前做。

最推荐办法总结

mkdir /mnt/original
mount --bind /proc/1/root/var/lib /mnt/original
ls /mnt/original